package com.ssd.handler;

import com.ssd.exception.LogicException;
import com.ssd.model.domain.RefundRecord;
import com.ssd.model.domain.Trading;

/**
 * 基础支付功能的定义，具体业务由不同的支付渠道实现
 *
 * @author cy
 * @version 1.0
 */
public interface BasicPayHandler {

    /**
     * 查询交易的当前状态，并根据查询结果更新交易对象的状态
     * @param trading 支付交易对象，包含交易的相关信息
     * @return 返回一个布尔值，表示交易状态是否有变化
     * @throws LogicException 如果查询过程中发生错误，抛出此异常
     */
    Boolean queryTrading(Trading trading) throws LogicException;

    /**
     * 关闭交易
     * 用于关闭一个已经存在的交易，防止交易继续进行。
     * @param trading 支付交易对象，包含交易的相关信息
     * @return 返回一个布尔值，表示交易是否成功关闭
     * @throws LogicException 如果关闭过程中发生错误，抛出此异常
     */
    Boolean closeTrading(Trading trading) throws LogicException;

    /**
     * 统一收单交易退款接口
     * 当交易发生之后一段时间内，由于买家或者卖家的原因需要退款时，卖家可以通过退款接口将支付款退还给买家，
     * 将在收到退款请求并且验证成功之后，按照退款规则将支付款按原路退到买家帐号上。
     * @param refundRecord 退款记录对象，包含退款请求的相关信息
     * @return 返回一个布尔值，表示退款状态是否有变化
     * @throws LogicException 如果退款过程中发生错误，抛出此异常
     */
    Boolean refundTrading(RefundRecord refundRecord) throws LogicException;

    /**
     * 统一收单交易退款查询接口
     * 用于查询特定退款交易的状态，以确保退款操作已经完成。
     * @param refundRecord 退款记录对象，包含退款交易单号等信息
     * @return 返回一个布尔值，表示退款状态是否有变化
     * @throws LogicException 如果查询过程中发生错误，抛出此异常
     */
    Boolean queryRefundTrading(RefundRecord refundRecord) throws LogicException;

}

